package com.mikelouis.test.scala.proginscala.chapter13

/**
 * 在说到私有或保护访问的时候，Scala的访问规则给予了伴生对象和类一些特权。
 * 类把它所有的访问权限共享给半生对象，反过来也是如此。
 * 特别的是，对象可以访问所有它的伴生类的私有成员，就好象类也可以访问所有伴生对象的私有成员一样
 *
 * Created by yuazhu on 1/14/2015.
 */
class Rocket {

  import Rocket.fuel

  private def canGoHomeAgain = fuel > 20
}

/**
 * Rocket类可以访问方法fuel，它在Rocket对象中被声明为私有。
 * 类似地，Rocket对象也可以访问Rocket类里面的私有方法canGetHome
 *
 * 有一个例外，说到protected static成员时，Scala和Java的相似性被打破了。Java类C的保护静态成员可以被C的所有子类访问。相反，伴生对象的protected成员没有意义，因为单例对象没有任何子类
 */
object Rocket {
  private def fuel = 10

  def chooseStrategy(rocket: Rocket) {
    if (rocket.canGoHomeAgain)
      goHome()
    else
      pickAStar()
  }

  def goHome() {}

  def pickAStar() {}
}
